package org.agony2d.view.core 
{
	import flash.display.DisplayObject;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import org.agony2d.notify.INotifier;
	import org.agony2d.renderer.IView;
	import org.agony2d.view.Fusion;
	
	[Event(name = "press", type = "org.agony2d.notify.AEvent")] 
	[Event(name = "release", type = "org.agony2d.notify.AEvent")] 
	[Event(name = "over", type = "org.agony2d.notify.AEvent")] 
	[Event(name = "leave", type = "org.agony2d.notify.AEvent")] 
	[Event(name = "move", type = "org.agony2d.notify.AEvent")] 
	[Event(name = "click", type = "org.agony2d.notify.AEvent")]
	[Event(name = "doubleClick", type = "org.agony2d.notify.AEvent")]
	
	[Event(name = "startDrag", type = "org.agony2d.notify.AEvent")]
	[Event(name = "dragging", type = "org.agony2d.notify.AEvent")]
	[Event(name = "stopDrag", type = "org.agony2d.notify.AEvent")]
	
	[Event(name = "kill", type = "org.agony2d.notify.AEvent")]
	[Event(name = "visibleChange", type = "org.agony2d.notify.AEvent")]
	[Event(name = "interactiveChange", type = "org.agony2d.notify.AEvent")]
	
public interface IComponent extends IView
{
	
	function get displayObject() : DisplayObject
	
	function get global() : Point
	
	function get layer() : int
	
	function get fusion() : Fusion
	
	function get hovered() : Boolean
	
	function get pressed() : Boolean
	
	function get dragging() : Boolean
	
	function get draggingInBounds() : Boolean
	
	function get spaceWidth() : Number
	function set spaceWidth( v:Number ) : void
	
	function get spaceHeight() : Number
	function set spaceHeight( v:Number ) : void
	
	function moveInStage( gx:Number, gy:Number ) : void
	
	function startDrag( lockCenter:Boolean = false, bounds:Rectangle = null ) : void
	
	function stopDrag( fireEvent:Boolean = false ) : void
	
	function bePartOf ( c:IComponent ) : Boolean
	
	function addEventListener( type:String, listener:Function, priority:int = 0 ) : void
	
	function removeEventListener( type:String, listener:Function ) : void
	
	function removeAllEventListeners( type:String ) : void
}
}